package com.relsell.pointofsales;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.IntentService;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.support.v4.content.WakefulBroadcastReceiver;
import android.util.Log;

import com.google.android.gms.gcm.GoogleCloudMessaging;
import com.relsell.admin.DbHelper;
import com.relsell.utility.AppVars;
import com.relsell.view.Login;

public class GcmIntentService extends IntentService {
	public static final int NOTIFICATION_ID = 1;
	private NotificationManager mNotificationManager;
	NotificationCompat.Builder builder;

	public GcmIntentService() {
		super("GcmIntentService");
	}

	@Override
	protected void onHandleIntent(Intent intent) {
		Bundle extras = intent.getExtras();
		GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
		String messageType = gcm.getMessageType(intent);

		if (!extras.isEmpty()) { // has effect of unparcelling Bundle
			/*
			 * Filter messages based on message type. Since it is likely that
			 * GCM will be extended in the future with new message types, just
			 * ignore any message types you're not interested in, or that you
			 * don't recognize.
			 */
			if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR
					.equals(messageType)) {
				sendNotification("Send error: " + extras.toString());
			} else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED
					.equals(messageType)) {
				sendNotification("Deleted messages on server: "
						+ extras.toString());
				// If it's a regular GCM message, do some work.
			} else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE
					.equals(messageType)) {
				String json_data = extras.getString("res_data");
				if (AppVars.isLogEnabled) {
					Log.v(AppVars.LOG_TAG, "Received json_data " + json_data);
					
					
				}
				try {
					JSONArray obj = new JSONArray(json_data);

					for (int i=0;i<obj.length();i++) {
						String userdata = obj.get(i).toString();
						JSONObject localObject = new JSONObject(userdata);
						String sellingdate=localObject.getString("selling_date");
						String userid=localObject.getString("userid");
						String latitude=localObject.getString("latitude");
						String longitude=localObject.getString("longitude");
						String username="relsell";
						String producttype=localObject.getString("product_type");
						String targetAchieved = localObject.getString("target_achieved");
						
						DbHelper db=new DbHelper(this);
						db.open();
						db.deleteMapDataForDate(sellingdate);
						db.insert_map_data(sellingdate,userid ,latitude ,longitude , username,producttype , targetAchieved);
						db.close();
						Log.v(AppVars.LOG_TAG, "Product Saved");
						if (AppVars.isLogEnabled) {
							Log.v(AppVars.LOG_TAG, "Received user  id: " + localObject.getString("userid"));
						}
						sendNotification("Products Data Submitted");	
					}
				} catch (JSONException e) {

					e.printStackTrace();
				}
			}
		}
		// Release the wake lock provided by the WakefulBroadcastReceiver.
		WakefulBroadcastReceiver.completeWakefulIntent(intent);
	}

	// Put the message into a notification and post it.
	// This is just one simple example of what you might choose to do with
	// a GCM message.
	private void sendNotification(String msg) {
		mNotificationManager = (NotificationManager) this
				.getSystemService(Context.NOTIFICATION_SERVICE);

		PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
				new Intent(this, Login.class), 0);

		NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
				this).setSmallIcon(R.drawable.ic_launcher)
				.setContentTitle("GCM Notification")
				.setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
				.setContentText(msg);

		mBuilder.setContentIntent(contentIntent);
		mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
	}
}